﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Threading;

namespace FlyShop
{
    public partial class FrmAutenticacao : Form
    {   // criado o contador para o timer
        int contador = 0;
        
        // Criados os adaptadores e comandos sql
        FrmConsultaVoo frmVoo = new FrmConsultaVoo();
        OleDbConnection conexao;
        OleDbCommand comandoVerificar;
        OleDbDataReader dr;
        
        // String de conexão e de consulta
        string strConexão = "Provider=MSDAORA;Data Source=localhost;Persist Security Info=True;User ID=pi;Password=pi";
        string strConsulta = "Select * from usuario u join pessoa p on u.cod_pessoa = p.cod_pessoa and u.login = ? and u.senha = ?";
        
        public FrmAutenticacao()
        {
            InitializeComponent();
        }

        private void btAutenticar_Click(object sender, EventArgs e)
        {   
            comandoVerificar = new OleDbCommand(strConsulta, conexao); 
            
            // Parâmetros
            OleDbParameter pUsuario = new OleDbParameter("usuario", OleDbType.VarChar);
            pUsuario.Value = txtUsuario.Text.Trim();
            comandoVerificar.Parameters.Add(pUsuario);
          
            OleDbParameter pSenha = new OleDbParameter("senha", OleDbType.VarChar);
            pSenha.Value = txtSenha.Text.Trim();
            comandoVerificar.Parameters.Add(pSenha);

            try
            {
                // Select
                dr = comandoVerificar.ExecuteReader();

                // Se houver um registro a autenticação ocorreu com sucesso
                if (dr.Read())
                {

                    String nomeUsuario = dr["nome"].ToString();
                    int codUsuario = Int32.Parse(dr["cod_pessoa"].ToString());
                    int nivel = Int32.Parse(dr["nivel"].ToString());                    

                    frmVoo = new FrmConsultaVoo();
                    frmVoo.nomeUsuario = nomeUsuario;
                    frmVoo.codUsuario = codUsuario;
                    frmVoo.nivel = nivel;
                    pbAutenticacao.Show();
                    lblLoading.Text = "Inicializando Aplicação";
                    timer1.Start();
                    timer2.Start();
                    frmVoo.logoff = false;

                }
                else
                {
                    MessageBox.Show(this, "Usuário e/ou senha incorretos.", "Autenticação",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }         
            }
            catch (Exception)
            {
                MessageBox.Show("Não foi possível estabelecer conexão com o banco de dados.");    
            }

        }

        private void FrmAutenticação_Load(object sender, EventArgs e)
        {
            try
            {
                // abre a conexão com o banco de dados
                conexao = new OleDbConnection(strConexão);
                conexao.Open();
            }
            catch (Exception)
            {
                MessageBox.Show(this, "Não foi possível se conectar ao banco de dados.", "Conexão",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            // atribuido vazio à label de status e é escondida a barra
            lblLoading.Text = "";
            pbAutenticacao.Hide();
            label1.Text = "";
        }

        private void FrmAutenticacao_FormClosed(object sender, FormClosedEventArgs e)
        {
         conexao.Close();
         Application.Exit();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {   // verifica se a barra ja esta completa e abre o outro form ou senão incremento a barra
            
            if (pbAutenticacao.Value == pbAutenticacao.Maximum)
            {
                timer1.Stop();
                frmVoo.Show();
                Hide();
                timer1.Stop();
                timer2.Stop();
                conexao.Close();
            }
           
            pbAutenticacao.Increment(1);            
        }
        
        
        private void timer2_Tick(object sender, EventArgs e)
        {  //incrementa o contador
           contador++;
           
           // verifica o valor do contador
           if (contador == 1) lblLoading.Text = "Carregando Módulos";
           if (contador == 2) lblLoading.Text = "Preparando Interface";

        }

        private void txtUsuario_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                btAutenticar_Click(sender, e);
        }
            

        private void txtSenha_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                btAutenticar_Click(sender, e);
        }

        private void FrmAutenticacao_FormClosing(object sender, FormClosingEventArgs e)
        {
        }

        private void FrmAutenticacao_KeyDown(object sender, KeyEventArgs e)
        {
            //Hotkey para a tecla ESC fechar a janela
            if (e.KeyData == (Keys.Escape))
            {
                this.Close();
            }
        } 
}

}
